package base

import (
	"path/filepath"
	"os"
	"strings"
	"time"
	"crypto/md5"
	"encoding/hex"
	"net"
)

// 当前项目根目录
var API_ROOT string


// 获取项目路径
func GetPath() string {

	if API_ROOT != "" {
		return API_ROOT
	}

	dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
	if err != nil {
		print(err.Error())
	}

	API_ROOT = strings.Replace(dir, "\\", "/", -1)
	return API_ROOT
}

// 判断文件目录否存在
func IsDirExists(path string) bool {
	fi, err := os.Stat(path)

	if err != nil {
		return os.IsExist(err)
	} else {
		return fi.IsDir()
	}

}

// 创建文件
func MkdirFile(path string) error {

	err := os.Mkdir(path, os.ModePerm)  //在当前目录下生成md目录
	if err != nil {
		return err
	}
	return nil
}

// 返回当前时间
func GetData() string {

	timestamp := time.Now().Unix()
	tm := time.Unix(timestamp, 0)
	return tm.Format("2006-01-02 03:04:05")
}



// 获取当前系统环境
func GetRunTime() string {
	//获取系统环境变量
	RUN_TIME:= os.Getenv("RUN_TIME")
	if RUN_TIME == ""{
		panic("No RUN_TIME Can't start")
	}
	return RUN_TIME
}

// MD5 加密字符串
func GetMD5(plainText string)string{
	h := md5.New()
	h.Write([]byte(plainText))
	return hex.EncodeToString(h.Sum(nil))
}

func GetLocalIP() string  {
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return ""
	}
	for _, a := range addrs {
		if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
			if ipnet.IP.To4() != nil {
				return ipnet.IP.String()
			}
		}
	}
	return ""
}